/*
 * Copyright 2010 Michael Nitsche
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package de.mnit.schnipsel.div;

import de.mnit.basis.daten.typ.zeit.S_Zeitpunkt;
import de.mnit.basis.daten.typ.zeit.Zeitpunkt;
import de.mnit.basis.fehler.Fehler;
import de.mnit.basis.fehler.system.F_Sys_InOut;
import de.mnit.basis.sys.datei.S_Datei;
import de.mnit.basis.sys.datei.konfig.KonfigDatei;
import de.mnit.schnipsel.zentral.SC_SPRACHE;

/**
 * @author Michael Nitsche
 * 15.02.2010	Erstellt
 */
public class KonfigLokal {

	private static KonfigLokal instanz=null;

	public static void init(String titel, S_Datei datei) {
		if(instanz!=null)
			throw Fehler.sonstige.da_Verboten("Wurde bereits initialisiert!");
		instanz=new KonfigLokal(titel, datei);
	}

	public static KonfigLokal i() {
		Fehler.objekt.wenn_Null(instanz);
		return instanz;
	}


	private final KonfigDatei konfig;


	public KonfigLokal(String titel, S_Datei datei) {
//		this.konfig=new KonfigDatei(titel(), ordner.dF(dateiname(), "properties"));
		this.konfig=new KonfigDatei(titel, datei);
		try {
			this.konfig.lesen();
		}
		catch(F_Sys_InOut f) {
			Fehler.zeig(f, false); //Ok, nicht SWT
		}
	}


	public void schliessen() throws F_Sys_InOut {
		if(konfig!=null)
			konfig.schliessen();
	}

	// DATEN

	public int anwBaumBreite(int... breite) {
		return iInt("anw.baum.breite", breite, 150);
	}

	public int anwListenHoehe(int... hoehe) {
		return iInt("anw.liste.hoehe", hoehe, 150);
	}

	public int anwListenSpalteKlicks(int... breite) {
		return iInt("anw.liste.spalte.klicks", breite, 70);
	}

	public int anwListenSpalteDatum(int... breite) {
		return iInt("anw.liste.spalte.datum", breite, 130);
	}

	public int anwBreite(int... breite) {
		return iInt("anw.breite", breite, 800);
	}

	public int anwHoehe(int... hoehe) {
		return iInt("anw.hoehe", hoehe, 600);
	}

	public int anwSprache(SC_SPRACHE... sprache) {
		int[] ia= sprache==null || sprache.length==0
			? new int[0]
			: new int[]{ sprache[0].ordinal() };
		return iInt("anw.sprache", ia, SC_SPRACHE.DEUTSCH.ordinal());
	}

	public S_Zeitpunkt syncZeit(S_Zeitpunkt... zeit) {
		return iZeit("sync.zeit", zeit, Zeitpunkt.neu("2010-01-01 00:00:00"));
	}

	public String schnipselExportFormat(String... format) {
		return iStr("schnipsel.export.format", format, "htm");
	}

	public String syncServer(String... server) {
		return iStr("sync.server", server, "tuxperten.de");
	}

	public String syncBenutzer(String... benutzer) {
		return iStr("sync.benutzer", benutzer, "");
	}

	public String syncPass(String... pass) {
		return iStr("sync.pass", pass, "");
	}

	// INTERN

	private int iInt(String ident, int[] wert, int standard) {
		Fehler.zahl.wenn_ZuGross(1, wert.length);
		if(wert.length==1)
			this.konfig.sInteger(ident, wert[0]);
		return this.konfig.gIntegerStd(ident, standard);
	}

	private String iStr(String ident, String[] wert, String standard) {
		Fehler.zahl.wenn_ZuGross(1, wert.length);
		if(wert.length==1)
			this.konfig.sString(ident, wert[0]);
		return this.konfig.gStringStd(ident, standard);
	}

	private S_Zeitpunkt iZeit(String ident, S_Zeitpunkt[] wert, S_Zeitpunkt standard) {
		Fehler.zahl.wenn_ZuGross(1, wert.length);
		if(wert.length==1)
			this.konfig.sString(ident, wert[0].zuTextEDV());
		return Zeitpunkt.neu(this.konfig.gStringStd(ident, standard.zuTextEDV()));
	}

}
